import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.List;

/**
 * Clase responsable de dirigir la lava
 * 
 * @Daniel Varela
 * @1.0
 */
public abstract class Camino extends Actor
{
       private int pos;
       private boolean lava;
       private int dir;
       
       /**
        * Constructor por omision de la clase
        */
       public Camino(){};
       
       /**
        * Constructor de inicializacion de la clase
        * @param es la rotacion que tendra la imagen de la clase
        */
       public Camino(int Pos){
           lava = false;
           this.turn(pos * 90);
           pos = Pos;
           dir = 0;
       }
       
       /**
        * Definicion del metodo abstracto rota
        */
       public abstract void rota();
       /**
        * Definicion del metodo abstracto correLava
        */
       public abstract void correLava();
       /**
        * Definicion del metodo abstracto correSig
        */
       public abstract boolean correSig();
       
       /**
        * Cambia el valor de pos por el valor que recibe
        */
       public void tomaPos(int p){
            pos = p;    
       }
       
       /**
        * regresa el valor de pos
        */
       public int damePos(){
            return pos;    
        }
       
       /**
        * Cambia el sentido en el que corre la lava
        * @param d direccion de la lava 0 de izquierda a derecha o de abajo hacia arriba  y en sentido contrario a las manecillas del reloj
        *  1 para las las direcciones contrarias
        */
       public void tomaDir(int d){
           dir = d;
       }
       
       /**
        *  Regresa el sentido de la lava
        */
       public int dameDir(){
            return dir;    
        }
       
       /**
        * cambia el valor de la bandera bool a true
        */
       public void cambiaBool(){
            lava = true;    
       }
       
       /**
        * regresa el balor de la bandera bool
        */
       public boolean dameBool(){
            return lava;    
       }
     
       /**
        * checa que no se este en contacto con una piedra
        * regresa false cuando no esta en contacto con la
        * piedra
        */
       public boolean checaPiedra(){
            Mundo mundo;
            mundo = (Mundo)getWorld();    
            List<Piedra> list = mundo.getObjects(Piedra.class);
   
            for(Piedra it:list){
                if( it.getX() == this.getX() &&  it.getY() == this.getY())
                     return true;
            }
            
            return false;
       }
}
